// 题目链接：https://leetcode.com/problems/remove-element/

/**
 * @param {number[]} nums
 * @param {number} val
 * @return {number}
 */

// 错误 ——》方法1
// 原因：空间复杂度 O(1)
var removeElement = function (nums, val) {
  nums = nums.filter(item => item !== val)

  return nums
}

// 方法2
var removeElement1 = function (nums, val) {
  const len = nums.length

  for (let index = len - 1; index >= 0; index--) {
    const arrIndex = nums.lastIndexOf(val)
    if (arrIndex !== -1) {
      nums.splice(arrIndex, 1)
    }
  }

  return nums
}

// 方法3

var removeElement2 = function (nums, val) {
  while (nums.indexOf(val) >= 0) {
    nums.splice(nums.indexOf(val), 1)
  }

  return nums
}

// 方法4

var removeElement3 = function (nums, val) {
  let newLen = 0

  for (let index = 0; index < nums.length; index++) {
    if (nums[index] === val) {
      continue
    }

    nums[newLen] = nums[index]
    ++newLen
  }

  nums.length = newLen

  return nums
}

const arr = [1, 3, 3, 2, 2, 3]

console.log(removeElement3(arr, 2))

module.exports = {
  removeElement,
  removeElement1,
  removeElement2,
  removeElement3
}
